package Encapsulation.封装;

//创建外部类
public class Outer { 
	// 外部类的私有属性
	private int a = 99; 
    int b = 99;
    // 创建内部类
	public class Inner { 
		// 内部类的成员属性
		int b = 100; 
		// 创建内部类方法
		public void show() { 
			System.out.println("访问外部类的a：" + a);
			System.out.println("访问内部类的b：" + b);
			//当内部类与外部类有相同的成员变量或方法时，默认访问内部的，若要显示外部的，使用this关键字。
			System.out.println("访问外部类的b："+Outer.this.b); 
			// 外部类名.this.变量/方法
			System.out.println("\n");
		}
	}
	//在外部类调用内部类的方法时要先创建内部类的对象
	public void test() { 
		// 创建内部类的对象
		Inner i = new Inner(); 
		// 调用内部类的方法
		i.show(); 
		System.out.println("外部变量："+b);
		//当外部类与内部类有相同的成员变量或方法时，默认访问外部的，
		//若要显示内部的，同样是属于在外部类调用内部类的属性时要先创建内部类的方法，再加this关键字。
		System.out.println("内部变量："+i.b); 	
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 创建外部类的对象
		Outer o = new Outer(); 
		// 创建内部类的对象
		Inner i = o.new Inner(); 
		o.test();
		// 调用内部类的方法
		i.show(); 	
	}
}
